﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebAppPlanProduccion.Code;
using PlanProd.Contracts;
using WebAppPlanProduccion.Code.Security;
using Web.Framework;
using PlanProd.Contracts.Search;

namespace WebAppPlanProduccion.App
{
    public partial class IngresoDeProductoEdit : BasePage
    {
        public IngresoDeProducto ingresoProductoCurrent
        {
            get
            {
                return (IngresoDeProducto)ViewState["IngresoDeProducto"];
            }
            set
            {
                ViewState["IngresoDeProducto"] = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                HasPermissionToSeeMe(PlanProdSecurity.INGRESOPRODUCTO_VER);

                if (!this.IsPostBack)
                {
                    UIHelper.LoadProveedores(this.cboProveedor);
                    UIHelper.LoadDestinos(this.cboDestino);

                    if (this.Request.QueryString["Id"] == null)
                    {
                        ingresoProductoCurrent = new IngresoDeProducto();
                    }
                    else
                    {
                        ingresoProductoCurrent = WebServiceHelper.GetIngresoDeProductoById(Convert.ToInt32(this.Request.QueryString["Id"]));
                    }

                    Bind();
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        private void LoadProductoCbo()
        {
            SearchProductCriteria criteria = new SearchProductCriteria();
            criteria.TemporadaId = UIHelper.GetIntFromInputCbo(this.cboTemporada);
            criteria.EmpresaId = BasePage.CompanyId;

            var productResult = WebServiceHelper.SearchProducts(WebServiceHelper.ServiceOptionsDefault, criteria);

            List<Producto> productos = productResult.Productos;
            this.cboProducto.Items.Clear();

            foreach (var producto in productos)
            {
                ListItem item = new ListItem();
                item.Text = producto.ProductoIdExterno + producto.ColorIdExterno;
                item.Value = producto.Id.ToString();
                this.cboProducto.Items.Add(item);
            }
        }

        private List<LinkButton> actionButtons = new List<LinkButton>();
        LinkButton guardarButton = new LinkButton();
        LinkButton cancelarButton = new LinkButton();

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            guardarButton.ID = "BoCommandGuardar";
            guardarButton.Text = "Guardar";
            guardarButton.Click += new EventHandler(lnkGuardar_Click);
            actionButtons.Add(guardarButton);

         
            cancelarButton.ID = "BoCommandCancelar";
            cancelarButton.Text = "Cancelar";
            cancelarButton.Click += new EventHandler(lnkCancelar_Click);
            actionButtons.Add(cancelarButton);

            base.LoadContextActions(actionButtons);
        }

        protected override void ApplySecurity()
        {
            base.ApplySecurity();
            guardarButton.Visible =
            this.lnkGuardar.Visible = HasPermissionFor(PlanProdSecurity.INGRESOPRODUCTO_EDITAR);
        }

        private void Bind()
        {
            if (ingresoProductoCurrent.Id != 0)
            {
                this.txtIngresoId.Text = ingresoProductoCurrent.Id.ToString();
                if (ingresoProductoCurrent.Id != 0)
                {
                    if (ingresoProductoCurrent.TemporadaId.HasValue)
                    {
                        UIHelper.LoadTemporadas(this.cboTemporada, null, string.Empty);
                        this.cboTemporada.SelectedValue = ingresoProductoCurrent.TemporadaId.Value.ToString();
                    }

                    LoadProductoCbo();
                    this.cboProducto.SelectedValue = ingresoProductoCurrent.ProductoId.ToString();

                    this.cboProveedor.SelectedValue = ingresoProductoCurrent.ProveedorId.ToString();

                    this.cboDestino.SelectedValue = ingresoProductoCurrent.DestinoId.ToString();
                }

                this.txtFechaEntrega.Text = ingresoProductoCurrent.FechaEntrega.ToString("dd/MM/yyyy");
                this.txtCantidad.Text = ingresoProductoCurrent.Cantidad.ToString();
                this.txtRemitoLetra.Text = ingresoProductoCurrent.RemitoLetra;
                if (ingresoProductoCurrent.RemitoSucursal.HasValue)
                {
                    this.txtRemitoSucursal.Text = ingresoProductoCurrent.RemitoSucursal.Value.ToString();
                }
                
                this.txtRemitoNumro.Text = ingresoProductoCurrent.RemitoNumero;
                
                BindAuditory(ingresoProductoCurrent);
            }
            else
            {
                UIHelper.LoadTemporadas(this.cboTemporada, null, string.Empty);
                LoadProductoCbo();
            }
        }

        private void SetData()
        {
            if (!String.IsNullOrEmpty(this.txtIngresoId.Text))
            {
                ingresoProductoCurrent.Id = UIHelper.GetIntFromInputText(this.txtIngresoId.Text).Value;
            }

            ingresoProductoCurrent.EmpresaId = BaseWebPage.CompanyId;
            ingresoProductoCurrent.ProveedorId = UIHelper.GetIntFromInputCbo(this.cboProveedor).Value;
            ingresoProductoCurrent.DestinoId = UIHelper.GetIntFromInputCbo(this.cboDestino).Value;
            ingresoProductoCurrent.ProductoId = UIHelper.GetIntFromInputCbo(this.cboProducto).Value;
            ingresoProductoCurrent.TemporadaId = UIHelper.GetIntFromInputCbo(this.cboTemporada);
            ingresoProductoCurrent.FechaEntrega = UIHelper.GetDateTimeFromInputText(this.txtFechaEntrega.Text).Value;
            ingresoProductoCurrent.Cantidad = UIHelper.GetIntFromInputText(this.txtCantidad.Text).Value;
            ingresoProductoCurrent.RemitoLetra = this.txtRemitoLetra.Text;
            ingresoProductoCurrent.RemitoNumero = this.txtRemitoNumro.Text;
            ingresoProductoCurrent.RemitoSucursal = UIHelper.GetIntFromInputText(this.txtRemitoSucursal.Text);
        }

        private void Save()
        {
            ingresoProductoCurrent = WebServiceHelper.SaveIngresoDeProducto(ingresoProductoCurrent);
        }

        private bool Validar()
        {
            return true;
        }

        protected void lnkGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                SetData();
                if (Validar())
                {
                    Save();
                    Response.Redirect("/App/IngresoDeProductoList.aspx", true);
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                Response.Redirect("/App/IngresoDeProductoList.aspx", true);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void cboTemporada_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                // Al cambiar la temporada cargo los productos
                LoadProductoCbo();
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }
    }
}